$(document).ajaxStart(function() {
    $('#general_error').hide();     
    
    document.getElementById('divLoading').style.display='block';
    document.getElementById('divBackGround').style.display='block';
    
    /*
    $('#loadingGif').fadeIn(100);
    $("#contenidoHTML").css({ // this is just for style
        "opacity": "0.3"  ,
        "z-index":"99999999"
    });   
    $("#main").css({ // this is just for style
        "opacity": "0.3"  ,
        "z-index":"99999999"
    });
    */
});

$(document).ajaxStop(function() {
    
    document.getElementById('divLoading').style.display='none';
    document.getElementById('divBackGround').style.display='none';
    
    /* 
    $('#loadingGif').fadeOut(100);
     $("#contenidoHTML").css({ // this is just for style        
           "opacity": "1" 
     }); 
     $("#main").css({ // this is just for style        
           "opacity": "1" 
     }); 
     */
});

function cerrarSession(){
    
    var r=confirm("Desea Cerrar la sesion actual?");
    if (r===false){
      return;
    }
        
    $.ajax({
        type: "POST",
        url: "../controlador/SeguridadUsuario.php",
        async: true, //--- realizar la peticion asincrona
        data: "OPERACION=logout&controlador=SeguridadUsuario",
        dataType: 'json',
        cache : false,
        success: function(item){
            if(item.hasOwnProperty("ERROR")){
                showPopupBoxMessage(item.ERROR);
            }else{   
                window.location.href = "../index.html";
            }
        },error :function(request, status, error){
            showPopupBoxMessage(error);
        }
    });
}

function validarPermisoUsuarioSession(codPermiso) {
    var response=$.ajax({
        type: "POST",
        url: "../controlador/SeguridadPermiso.php",
        async: false, //--- realizar la peticion de manera asincrona
        data: "OPERACION=validarPermisoByUsuario&controlador=SeguridadPermiso&codPermiso="+escape(codPermiso),
        dataType: 'json',
        cache : false,
        success: function(item){            
            //--- do it something
        },error :function(request, status, error){
            showPopupBoxMessage(error);
        }
    }).responseText;
    
    var obj = $.parseJSON(response);
    if(obj.hasOwnProperty("ERROR")){
        showPopupBoxMessage(obj.ERROR);
        return obj.ERROR;
    }else{
        return "";
    }
}

function getUrlValues(paramName){
    paramName = paramName.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regex = new RegExp("[\\?&]" + paramName + "=([^&#]*)"),
        results = regex.exec(location.search);
        return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

function showPopupBoxMessage (message) {  
    if (message!==""){
        //document.getElementById('divGeneralError').style.display='block';
        //document.getElementById('divBackGround').style.display='block';    
        $("#general_error").html("");
        $("#general_error").html("</br>"+message);
        $( "#general_error" ).dialog( "open" );
    }     
}   

function inicializarPaginacionGrilla(DBtableName,idDivPaginacion,whereSection,registrosPorPagina){
    var totalPaginas=0;
    
    if (typeof whereSection === "undefined") {
        whereSection="";
    }
    if (typeof registrosPorPagina === "undefined") {
        registrosPorPagina=-1;
    }
    
    //--- obtengo el total de paginas y numero de registros por pagina
    $.ajax({
        type: "POST",
        url: "../controlador/FuncionesGenerales.php",
        async: false, //--- realizar la peticion de manera asincrona
        data: "OPERACION=getNumberOfPages&controlador=FuncionesGenerales&tableName="+DBtableName+"&whereSection="+escape(whereSection)+"&registrosPorPagina="+registrosPorPagina,
        dataType: 'json',
        cache : false,
        success: function(item){
            if(item.hasOwnProperty("ERROR")){
                //showPopupBoxMessage(item.ERROR);
                 alert(item.ERROR);
                totalPaginas=1;
            }else{     
                totalPaginas=item.numPaginas;
                registrosPorPagina=item.registrosPorPagina;
            }
        },error :function(request, status, error){
            showPopupBoxMessage(error);
        }
    });
    
    $("#"+idDivPaginacion).find("#totalPaginas").val(totalPaginas);
    $("#"+idDivPaginacion).find("#registrosPorPagina").val(registrosPorPagina);
    
    //--- verifico si estoy en la primera pagina
    if($("#"+idDivPaginacion).find("#paginaActual").val()==="0"){
        //--- actulizo el label
        $("#"+idDivPaginacion).find("#labelPagina").text("Pagina 1");
        //--- deshabilito el boton "Atras"
        $("#"+idDivPaginacion).find("#paginacion_prev").css({"opacity": "0.3"});           
        $("#"+idDivPaginacion).find("#paginacion_prev").attr('disabled', true);
        $("#"+idDivPaginacion).find("#paginacion_begin").css({"opacity": "0.3"});           
        $("#"+idDivPaginacion).find("#paginacion_begin").attr('disabled', true);
    }
    
    
    if(parseInt($("#"+idDivPaginacion).find("#paginaActual").val())+1>=totalPaginas){
        $("#"+idDivPaginacion).find("#paginacion_next").css({"opacity": "0.3"});
        $("#"+idDivPaginacion).find("#paginacion_next").attr('disabled', true);
        $("#"+idDivPaginacion).find("#paginacion_end").css({"opacity": "0.3"});
        $("#"+idDivPaginacion).find("#paginacion_end").attr('disabled', true);
    }else{
        $("#"+idDivPaginacion).find("#paginacion_next").css({"opacity": "1"});
        $("#"+idDivPaginacion).find("#paginacion_next").attr('disabled', false);
        $("#"+idDivPaginacion).find("#paginacion_end").css({"opacity": "1"});
        $("#"+idDivPaginacion).find("#paginacion_end").attr('disabled', false);
    }
}

function cargarDatosGrillaDesdeControlador(idTabla,controlador,operacion,camposAdicionales,pagina,registrosPorPagina,campoFiltroOrden,valorFiltro) {  
    if (typeof camposAdicionales === "undefined") {
        camposAdicionales="";
    }
    if (typeof pagina === "undefined") {
        pagina=0;
    }
    if (typeof registrosPorPagina === "undefined") {
        registrosPorPagina=-1;
    }
    if (typeof campoFiltroOrden === "undefined") {
        campoFiltroOrden="";
    }
    if (typeof valorFiltro === "undefined") {
        valorFiltro="";
    }
    
    //-- Obtengo la informacion
    $.ajax({
        type: "POST",
        url: "../controlador/"+controlador+".php",
        //async: false, //--- realizar la peticion asincrona
        data: "OPERACION="+operacion+"&controlador="+controlador+(camposAdicionales.length>0 ? "&"+camposAdicionales : "" ) + "&numPagina="+pagina + "&registrosPorPagina="+registrosPorPagina + "&campoFiltroOrden="+escape(campoFiltroOrden) + "&valorFiltro="+escape(valorFiltro),
        dataType: 'json',
        cache : false,
        success: function(item){
            if(item.hasOwnProperty("ERROR")){
                showPopupBoxMessage(item.ERROR);
            }else if(item.hasOwnProperty("HTML")){
                //--- limpio la tabla
                while(document.getElementById(idTabla).rows.length>1){
                    document.getElementById(idTabla).deleteRow(document.getElementById(idTabla).rows.length-1);
                }
                //--- cargo los nuevos datos
                $( "#"+idTabla+" tbody" ).append(item.HTML);
            }            
        },error :function(request, status, error){
            showPopupBoxMessage(error);
        }
    });
}   

function cargarOpcionesSelectDesdeControlador(select,controlador,operacion,camposAdicionales) {  
    //alert("llego...");
    if (typeof camposAdicionales === "undefined") {
        camposAdicionales="";
    }
    //-- Obtengo la informacion
    $.ajax({
        type: "POST",
        //async:false,
        url: "../controlador/"+controlador+".php",
        data: "OPERACION="+operacion+"&controlador="+controlador+ (camposAdicionales.length>0 ? "&"+camposAdicionales : "" ),
        dataType: 'json',
        cache : false,
        success: function(item){
            if(item.hasOwnProperty("ERROR")){
                showPopupBoxMessage(item.ERROR);
            }else if(item.hasOwnProperty("HTML")){
                select.append(item.HTML);
            }
        },error :function(request, status, error){
            showPopupBoxMessage(error);
        }
    });
}   

function uploadFile(operacion, idForm, maxsize, extensionesPermitidas){
    //-- defino el objeto en que voy a guardar la informacion que se va a enviar al controlador
    var error=false;
    var formData = new FormData();        
    formData.append('controlador','UpLoadHandler');
    formData.append('OPERACION',operacion);
    //-- Obtengo todos input que esten en el formulario y los guardo en el objeto formData
    $("form#"+idForm+" :input").each(function(){
        var input = $(this); 
        
        //--- si es de tipo "File", valido su contenido
        if(input.attr("type")==="file"){            
            var files=document.getElementById(input.attr("id")).files;
            //--- verifico que se haya subido almenos un archivo
            if(files.length>0){
                //alert(files.length);
                //--- verifico el maxLength y las extensiones de cada archivo
                for (var i = 0; i < files.length; i++) {
                    
                    var extension = (files[i].name.substring(files[i].name.lastIndexOf("."))).toLowerCase();
                    
                    if(maxsize<files[i].size){
                        alert("El archivo "+ files[i].name + " excede el peso maximo ("+ (maxsize/1024) +" Kb.), Verifique.");
                        error=true;
                        break;
                    }else if(extensionesPermitidas!=="" && extensionesPermitidas.indexOf(extension) < 0) { 
                        alert("La extension del archivo  \""+ files[i].name + "\"  no es valida, Verifique.  \nExtensiones validas: "+ extensionesPermitidas +"");
                        error=true;
                        break;
                    }
                }
                if(!error){
                    //---agrego los archivos 1x1..
                    for (var i = 0; i < files.length; i++) {
                        formData.append(input.attr("id")+"[]", input.prop('files')[i]);
                    }
                }
            }    
        }else{
            formData.append(input.attr("id"), input.val());
        }
    });
    
    //--- realizo la peticion
    if(!error){
        $.ajax({
            type: 'POST',
            url: '../controlador/UpLoadHandler.php',  //Server script to process data
            data: formData,
            dataType: 'json',
            cache: false,
            success: function(item){
                if(item.hasOwnProperty("ERROR")){
                    showPopupBoxMessage(item.ERROR);
                    return "";
                }else{
                    //--- Limpio el formulario
                    $("#"+idForm).find('input[type="text"],input[type="password"],select,textarea,input[type="number"],input[type="file"]').each(
                        function(index){
                            $(this).val("");
                        }
                    );
                    //--- esta funcion debe estar declarada en cada pagina que invoque este metodo.
                    //--- con esta funcion el usuario podra hacer lo que necesite con los datos finales
                    //--- como por ejemplo, actualizar una tabla, mostrar un msn, etc
                    uploadFile_procesarResultado(item);
                    //--- retorno el resultado    
                    //return item.toString();                
                }
            }
            ,
            error :function(request, status, error){
                showPopupBoxMessage(error);
            }
            ,
            contentType: false,
            processData: false
        });
    }
}

function cargarOpcionesSelectFiltroDesdeGrilla(select,tabla) {  
    if (typeof select === "undefined") {
        showPopupBoxMessage("EL SELECT enviado a la funcion cargarOpcionesSelectFiltroDesdeGrilla es undefined, Verifique.");
        return;
    }else if (typeof tabla === "undefined") {
        showPopupBoxMessage("LA TABLA enviada a la funcion cargarOpcionesSelectFiltroDesdeGrilla es undefined, Verifique.");
        return;
    }else{
        //--- obtengo la TR que tiene la cabecera
        var trCabecera=tabla.find("#cabecera");
        if (typeof trCabecera === "undefined") {
            showPopupBoxMessage("LA TABLA NO tiene una fila con id='cabecera', Verifique.");
            return;
        }else{
            //--- agrego un option con valor "Seleccionar"
            select.append($('<option>', { 
                value: " ",
                text : "Seleccionar"
            }));
            //--- obtengo todos los TD con clase "TD_filtrable" y los guardo en el select
            trCabecera.find('.TD_filtrable').each (function() {
                select.append($('<option>', { 
                    value: $(this).attr("value"),
                    text : $(this).html()
                }));
            });  
        }
    }


}

function prevPagina(idDivPaginacion,idTabla,controlador,operacion,camposAdicionales,llevarAPaginaInicial) {  
    if(!$("#"+idDivPaginacion).find("#paginacion_begin").attr('disabled') && !$("#"+idDivPaginacion).find("#paginacion_prev").attr('disabled')){
        
        if(typeof llevarAPaginaInicial === "undefined"){
            llevarAPaginaInicial=false;
        }
        
        //--- obtengo la pagina actual
        var paginaActual =$("#"+idDivPaginacion).find("#paginaActual").val();
        var registrosPorPagina =$("#"+idDivPaginacion).find("#registrosPorPagina").val();
        var campoFiltroOrden= $("#divBuscador").find("#selectFiltroOrdenGrilla").val();   //-- Campo por el cual se hara el filtro
        var valorFiltro= $("#divBuscador").find("#valorFiltroGrilla").val();         //-- Valor con el cual se hara el filtro
        
        var paginaDestino = (llevarAPaginaInicial ? 0 : --paginaActual);
        //--- si es la primera pagina no hago nada
        if(paginaDestino>=0){
            //--- Cargo los datos
            cargarDatosGrillaDesdeControlador(idTabla,controlador,operacion,camposAdicionales,paginaDestino,registrosPorPagina,campoFiltroOrden,valorFiltro);

            //--- si retorno datos, entonces habilito el boton "Adelante" y actualizo el numero de la pagina
            $("#"+idDivPaginacion).find("#paginacion_next").css({"opacity": "1"});           
            $("#"+idDivPaginacion).find("#paginacion_next").attr('disabled', false);
            $("#"+idDivPaginacion).find("#paginacion_end").css({"opacity": "1"});           
            $("#"+idDivPaginacion).find("#paginacion_end").attr('disabled', false);

            //--- actualizo el numero de la pagina
            $("#"+idDivPaginacion).find("#paginaActual").val(paginaDestino);
            //--- actualizo el label
            $("#"+idDivPaginacion).find("#labelPagina").text("Pagina " + (paginaDestino + 1));

        }            
        if(paginaDestino<=0){
           //--- deshabilito el boton "Atras"
           $("#"+idDivPaginacion).find("#paginacion_prev").css({"opacity": "0.3"});           
           $("#"+idDivPaginacion).find("#paginacion_prev").attr('disabled', true);
           $("#"+idDivPaginacion).find("#paginacion_begin").css({"opacity": "0.3"});           
           $("#"+idDivPaginacion).find("#paginacion_begin").attr('disabled', true);
        }
    }    
}

function nextPagina(idDivPaginacion,idTabla,controlador,operacion,camposAdicionales,llevarAPaginaFinal) {  
    
    if(!$("#"+idDivPaginacion).find("#paginacion_end").attr('disabled') && !$("#"+idDivPaginacion).find("#paginacion_next").attr('disabled')){
        
        
        if(typeof llevarAPaginaFinal === "undefined"){
            llevarAPaginaFinal=false;
        }
        
        //--- obtengo la pagina actual
        var paginaActual=$("#"+idDivPaginacion).find("#paginaActual").val();
        var totalPaginas=$("#"+idDivPaginacion).find("#totalPaginas").val();
        var registrosPorPagina =$("#"+idDivPaginacion).find("#registrosPorPagina").val();
        var campoFiltroOrden= $("#divBuscador").find("#selectFiltroOrdenGrilla").val();   //-- Campo por el cual se hara el filtro
        var valorFiltro= $("#divBuscador").find("#valorFiltroGrilla").val();         //-- Valor con el cual se hara el filtro
        
        var paginaDestino = (llevarAPaginaFinal ? totalPaginas-1 : ++paginaActual);
        //--- Cargo los datos
        cargarDatosGrillaDesdeControlador(idTabla,controlador,operacion,camposAdicionales,paginaDestino,registrosPorPagina,campoFiltroOrden,valorFiltro);
        //--- actualizo el label
        $("#"+idDivPaginacion).find("#labelPagina").text("Pagina " + (paginaDestino+1));
        //--- habilito el boton "Atras"
        $("#"+idDivPaginacion).find("#paginacion_prev").css({"opacity": "1"});           
        $("#"+idDivPaginacion).find("#paginacion_prev").attr('disabled', false);
        $("#"+idDivPaginacion).find("#paginacion_begin").css({"opacity": "1"});           
        $("#"+idDivPaginacion).find("#paginacion_begin").attr('disabled', false);
        //--- actualizo el numero de la pagina
        $("#"+idDivPaginacion).find("#paginaActual").val(paginaDestino);            

        //--- si retorno datos, entonces habilito el boton "Atras" y actualizo el numero de la pagina
        if(paginaDestino+1>=totalPaginas){
            $("#"+idDivPaginacion).find("#paginacion_next").css({"opacity": "0.3"});
            $("#"+idDivPaginacion).find("#paginacion_next").attr('disabled', true);
            $("#"+idDivPaginacion).find("#paginacion_end").css({"opacity": "0.3"});
            $("#"+idDivPaginacion).find("#paginacion_end").attr('disabled', true);
        }
    }
}

$(function() {
    
     // Settings
    $('#general_error').hide();

    $( ".datepicker" ).datepicker( {dateFormat: "yy-mm-dd"} );
    
    $('.datetimepicker').datetimepicker({   
        ampm: true,
        dateFormat:"yy/mm/dd",
        timeFormat: 'hh:mm:ss'
    });
            
    var controlador =$("#controlador").val(); 
    
    $( "#general_error" ).dialog({
          autoOpen: false,
          height: 'auto',
          width:'auto',
          modal: true,
          title:'Mensaje',
          dialogClass: 'no-close success-dialog'
          
    }); 
    
    //--- controlar el comportamiento del DIV para hacer inserciones a la BD
    $( "#divInsert" ).dialog({
          autoOpen: false,
          height: 'auto',
          width:'auto',
          modal: true,
          open: function(){
                //--- valido los permisos del usuario en session
                if(validarPermisoUsuarioSession(controlador+".agregar")!==""){
                    $( this ).dialog( "close" ); 
                }
          },
          buttons: {
            Guardar: function() {
                
                $.ajax({
                    type: "POST",
                    url: "../controlador/"+controlador+".php",
                    data: $("#frmInsert").serialize()+"&controlador="+controlador,
                    dataType: 'json',
                    cache : false,
                    success: function(item){
                        if(item.hasOwnProperty("ERROR")){
                            showPopupBoxMessage(item.ERROR);
                            //$("#errormessage").append(item.ERROR);
                        }else{     
                            //--- Cargo los datos desde el controlador (para no descuadrar la paginacion)
                           inicializarPaginacionGrilla(
                                $("#controlador").val()    //--- Nombre de la DBtable correspondiente a la grilla
                               ,"divPaginacion"            //--- Div en el que maneja la paginacion
                               ,""                         //--- Where Section
                               ,-1                         //--- Registros por pagina (Cuando es "-1" toma los registros por pagina que se indican en el parametro del sistema)
                           );
                           cargarDatosGrillaDesdeControlador(
                                $("#controlador").val()    //--- idTabla
                               ,$("#controlador").val()    //--- controlador
                               ,"selectAllHTMLTableFormat" //--- Operacion
                               ,""                         //--- Campos adicionales
                               ,$("#divPaginacion").find("#paginaActual").val()            //--- Pagina actual
                               ,$("#divPaginacion").find("#registrosPorPagina").val()      //-- Registros por pagina
                               ,"" //$("#divBuscador").find("#selectFiltroOrdenGrilla").val()   //-- Campo por el cual se hara el filtro
                               ,"" //$("#divBuscador").find("#valorFiltroGrilla").val()         //-- Valor con el cual se hara el filtro
                           );
                             
                            //-- cierro la ventana
                            $( "#divInsert" ).dialog( "close" );                            
                        }
                    },error :function(request, status, error){
                        showPopupBoxMessage(error);
                        //$("#errormessage").append(error);
                    }
                });
                
            },
            Cancelar: function() {
              $( this ).dialog( "close" );
            }
          },
          close: function() {            
            var temp = $(this).find("#OPERACION").val();            
            //--- Blanqueo los campos de texto, numericos, selects, textareas
            $(this).find('input[type="text"],input[type="password"],select,textarea,input[type="number"]').each(
                function(index){
                    $(this).val("");
                }
            );
            //--- Deschequeo los ChaeckBox
            $(this).find('input:checkbox').each(
                function(index){
                    $(this).attr("checked","");
                }
            );
            //--- reestablezco el valor del campo en el que se graba la operacion    
            $(this).find("#OPERACION").val(temp);              
          }
    }); 

    //--- controlar el comportamiento del DIV para hacer actualizaciones a la BD
    $( "#divUpdate" ).dialog({
          autoOpen: false,
          height: 'auto',
          width: 'auto',
          modal: true,
          open: function(){
                //--- valido los permisos del usuario en session
                if(validarPermisoUsuarioSession(controlador+".actualizar")!==""){
                    $( this ).dialog( "close" ); 
                }
          },
          buttons: {
            Cambiar: function() {
                if (controlador==="MaeCliente"){  //--- este maestro es la excepcion porlo del calculo del digito de verificacion del nit
                    $.ajax({
                        type: "POST",
                        url: "../controlador/"+controlador+".php",
                        data: $("#frmUpdate").serialize()+"&controlador="+controlador,
                        dataType: 'json',
                        cache : false,
                        success: function(item){
                            if(item.hasOwnProperty("ERROR")){
                                showPopupBoxMessage(item.ERROR);
                                //$("#errormessage").append(item.ERROR);
                            }else{
                                //-- Obtengo el id de la fila que se actualizo
                                var id  = $("#frmUpdate").find( "#id" ).val();
                                //--- con la siguiente peticion obtengo el Digito de verificacion se que genero con el nuevo nit
                                $.ajax({ type: "POST",
                                    url: "../controlador/"+controlador+".php",
                                    dataType: 'json',
                                    data: "OPERACION=selectById&id="+id+"&controlador="+controlador,
                                    cache : false,
                                    success: function(item){
                                        if(item.hasOwnProperty("error")){
                                            showPopupBoxMessage(item.error);
                                        }else{    
                                            //-- Obtengo la fila que se actualizo
                                            var currentTr  = $( "#"+controlador+" tbody" ).find( "#"+id );
                                            //-- genero la nueva fila
                                            var newRow="<tr id='" + item.id + "'>" +
                                                "<td><a href='#' class='link_editar'>" + item.codMaeCliente +  (item.digitoVerificacion===null?"":"-" + item.digitoVerificacion) + "</a></td>" +
                                                "<td>" + (item.codMaeBarrio===null?"":item.codMaeBarrio) + "</td>" +
                                                "<td>" + (item.nombreMaeCliente===null?"":item.nombreMaeCliente) + "</td>" +
                                                "<td>" + (item.telefono===null?"":item.telefono) + "</td>" +
                                                "<td>" + (item.direccion===null?"":item.direccion) + "</td>" +
                                                "<td>" + (item.eMail===null?"":item.eMail) + "</td>" +
                                                "<td><b>" + (item.activo==="t" ? "<span style='color: rgb(14,51,22)'>SI</span>" : "<span style='color: rgb(184,35,35)'>NO</span>" ) + "</b></td>" +
                                                "<td>" +
                                                "<img class='icon-remove' id='icon-remove' src='../recursos/imagenes/remove.png' title='Eliminar el Registro'>" +
                                                "&nbsp;&nbsp;<img class='icon-picture' id='icon-picture' src='../recursos/imagenes/photo.png' title='Anexar Foto'>" +
                                                "</td>" +
                                              "</tr>";
                                            //-- reemplazo el contenido de la fila con lo nuevo
                                            
                                            currentTr.replaceWith(newRow);                            
                                            //-- cierro la ventana emergente
                                            $( "#divUpdate" ).dialog( "close" );
                                        }
                                    },error :function(request, status, error){
                                        showPopupBoxMessage(error);
                                    }
                                });
                                
                            } 
                        },error :function(request, status, error){
                            showPopupBoxMessage(error);
                        }
                    });
                }else{
                    $.ajax({
                        type: "POST",
                        url: "../controlador/"+controlador+".php",
                        data: $("#frmUpdate").serialize()+"&controlador="+controlador,
                        dataType: 'json',
                        cache : false,
                        success: function(item){
                            if(item.hasOwnProperty("ERROR")){
                                showPopupBoxMessage(item.ERROR);
                                //$("#errormessage").append(item.ERROR);
                            }else{
                                //-- Obtengo el id de la fila que se actualizo
                                var id  = $("#frmUpdate").find( "#id" ).val();
                                //-- Obtengo la fila que se actualizo
                                var currentTr  = $( "#"+controlador+" tbody" ).find( "#"+id );
                                //-- reemplazo el contenido de la fila con lo nuevo
                                currentTr.replaceWith(getNewRow($("#divUpdate")));                            
                                //-- cierro la ventana emergente
                                $( "#divUpdate" ).dialog( "close" );
                            } 
                        },error :function(request, status, error){
                            showPopupBoxMessage(error);
                            //$("#errormessage").append(error);
                        }
                    });
                }
            },
            Cancelar: function() {
              $( this ).dialog( "close" );
            }
          },
          close: function() {
            var temp = $(this).find("#OPERACION").val();    
            //--- Blanqueo los campos de texto, numericos, selects, textareas
            $(this).find('input[type="text"],input[type="password"],select,textarea,input[type="number"]').each(
                function(index){
                    $(this).val("");
                }
            );
            //--- reestablezco el valor del campo en el que se graba la operacion    
            $(this).find("#OPERACION").val(temp);              
          }
    });         
    
    //--- activar el boton para eliminar registros
    $(document).on("click",".icon-remove",function() {   
        
        //--- valido los permisos del usuario en session
        if(validarPermisoUsuarioSession(controlador+".eliminar")!==""){return;}
        //--- Continuo con la operacion            
        
        var r=confirm("Desea Eliminar el registro?");
        if (r===false){
          return;
        }
        
        var tr = $(this).closest('tr');
        var id = tr.attr( "id" );
        
        $.ajax({
            type: "POST",
            url: "../controlador/"+controlador+".php",
            data: "OPERACION=delete&id="+id+"&controlador="+controlador,
            dataType: 'json',
            cache : false,
            success: function(item){
                if(item.hasOwnProperty("ERROR")){
                    showPopupBoxMessage(item.ERROR);
                    //$("#generalerror").append(item.ERROR);
                }else{                            
                    tr.css("background-color","#FF3700");
                        tr.fadeOut(400, function(){
                            tr.remove();
                        });
                }
            },error :function(request, status, error){
                showPopupBoxMessage(error);
                //showPopupBoxMessage(item.ERROR);
            }
        });
        return false;           
    });
    
    //--- capturar el evento change del boton que realiza la busqueda para que limpie el campo valor, cuando no se seleccione ningun campo de la lista desplegable
    $(document).on("change","#selectFiltroOrdenGrilla",function(){
        $("#valorFiltroGrilla").val(($.trim($("#divBuscador").find("#selectFiltroOrdenGrilla option:selected" ).val()) === "" ? "" : $("#valorFiltroGrilla").val()));
    });
    
    //--- controlar el boton para realizar la busqueda en la grilla
    $(document).on("click",".botonRealizarBusqueda",function() {        
        
        var campo=$.trim($("#divBuscador").find("#selectFiltroOrdenGrilla").val());
        var valor =$.trim($("#divBuscador").find("#valorFiltroGrilla").val());
        var whereSentence="";
        
        if(campo==="activo"){
            if(valor.toLowerCase()==="si" || valor.toLowerCase()==="s" ){
                whereSentence="WHERE activo=true";
            }else if(valor.toLowerCase()==="no" || valor.toLowerCase()==="n" ){
                whereSentence="WHERE activo=false";
            }
        }else if(campo!==""){
            whereSentence="WHERE \""+campo+"\" ILIKE '%"+valor+"%'";
        }
        
        //--- si se definiio un filtro, ubico la grilla en la primea pagina
        if(whereSentence!==""){
            $("#divPaginacion").find("#paginaActual").val(0);
        }
        
        inicializarPaginacionGrilla(
             $("#controlador").val()    //--- Nombre de la DBtable correspondiente a la grilla
            ,"divPaginacion"            //--- Div en el que maneja la paginacion
            ,whereSentence              //--- Where Section
            ,-1                         //--- Registros por pagina (Cuando es "-1" toma los registros por pagina que se indican en el parametro del sistema)
        );
            
        cargarDatosGrillaDesdeControlador(
             $("#controlador").val()    //--- idTabla
            ,$("#controlador").val()    //--- controlador
            ,"selectAllHTMLTableFormat" //--- Operacion
            ,""                         //--- Campos adicionales
            ,$("#divPaginacion").find("#paginaActual").val()            //--- Pagina actual
            ,$("#divPaginacion").find("#registrosPorPagina").val()      //-- Registros por pagina
            ,$("#divBuscador").find("#selectFiltroOrdenGrilla").val()   //-- Campo por el cual se hara el filtro
            ,$("#divBuscador").find("#valorFiltroGrilla").val()         //-- Valor con el cual se hara el filtro
        );
        
    });
        
    //--- eventos de paginacion
    $(document).on("click",".paginacion_prev",function() {          
        prevPagina("divPaginacion",$("#controlador").val(),$("#controlador").val(),"selectAllHTMLTableFormat","",false);
    });
    
    $(document).on("click",".paginacion_begin",function() {          
        prevPagina("divPaginacion",$("#controlador").val(),$("#controlador").val(),"selectAllHTMLTableFormat","",true);
    });
    
    $(document).on("click",".paginacion_next",function() { 
        nextPagina("divPaginacion",$("#controlador").val(),$("#controlador").val(),"selectAllHTMLTableFormat","",false);
    });
    
    $(document).on("click",".paginacion_end",function() { 
        nextPagina("divPaginacion",$("#controlador").val(),$("#controlador").val(),"selectAllHTMLTableFormat","",true);
    });
});
